// 注册热键, 全局的或窗口内的.
package main

import (
	"fmt"
	widget "gitee.com/go_888/xcgui/xcgui/widget"

	app "gitee.com/go_888/xcgui/xcgui/app"
	wapi "gitee.com/go_888/xcgui/xcgui/wapi"
	window "gitee.com/go_888/xcgui/xcgui/window"
	xcc "gitee.com/go_888/xcgui/xcgui/xcc"
)

// 注册热键时填的id
const (
	ID_F3 = iota + 1
	ID_F4
)

var (
	a *app.X结构_全局API
	w *window.Window
)

func main() {
	a = app.X创建(true)
	a.X启用DPI(true)
	a.X启用自动DPI(true)
	w = window.X创建窗口(0, 0, 400, 300, "", 0, xcc.X窗口样式_默认样式)

	widget.X创建形状文本(10, 10, 200, 100, "全局热键: F3, F4\n\n窗口热键: F5, F6", w.X句柄)

	// 全局生效
	one()
	// 只在窗口内生效, 窗口内热键
	two()

	w.X显示(true)
	a.X运行()
	a.X退出()
}

// 全局生效, RegisterHotKey 是不能注册已有热键的, 别的程序注册了, 你就无法注册相同的了, 也就是热键冲突.
//
// 但可以用全局键盘钩子来解决, 监听全局键盘消息, 看 HookKeyboard 例子.
func one() {
	// 注册热键F3
	if !wapi.X注册键盘热键(w.X取HWND句柄(), ID_F3, 0, xcc.X按键_F3) {
		fmt.Println("注册热键F3失败")
	}

	// 注册热键F4
	if !wapi.X注册键盘热键(w.X取HWND句柄(), ID_F4, 0, xcc.X按键_F4) {
		fmt.Println("注册热键F4失败")
	}

	w.X事件_消息过程1(func(hWindow int, message uint32, wParam, lParam uintptr, pbHandled *bool) int {
		if message == uint32(xcc.X窗口事件_键盘_按下热键) {
			switch wParam {
			case ID_F3:
				fmt.Println("Event_WINDPROC1 F3键被按下")
			case ID_F4:
				fmt.Println("Event_WINDPROC1 F4键被按下")
			}
		}
		return 0
	})
}

// 只在窗口内生效, 窗口内热键
func two() {
	w.X事件_键盘按键1(func(hWindow int, wParam, lParam uintptr, pbHandled *bool) int {
		switch wParam {
		case xcc.X按键_F5:
			fmt.Println("Event_KEYDOWN1 F5键被按下")
		case xcc.X按键_F6:
			fmt.Println("Event_KEYDOWN1 F6键被按下")
		}
		return 0
	})
}
